<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象——若干属性的集合</title>
    <script type="text/javascript" src="../../../html/html-html/tool.js"></script>
    <script type="text/javascript" src="../../../html/jQuery-Ajax/js/jquery-3.3.1.js"></script>
</head>
<body>

<script type="text/javascript">


    /**
     * 所有的函数都有prototype,所有的对象都有隐藏的属性 __proto__
     *
     * 函数相当于java的类
     * 对象就相当于java实例化后的对象
     *
     * prototype在构造方法中
     *
     * 1.当你new 对象时就会执行Person.__proto__ = Person.prototype  然后你就可以Person.name  我也不知道为什么
     * 2.因为每个对象都有一个隐藏的属性——“__proto__”，这个属性引用了创建这个对象的函数的prototype。即：Person.__proto__ = Person.prototype
     * 3.__proto__ 默写情况下使用是可以隐藏的 例如:p.__proto__.name, p.name 这两种写法是一个意思
     * 4.注意 ""_ _proto_ _"  是两个下滑线(为了方便观察我加了空格)
     */
    function Person() {
    }

    Person.prototype.name = '王福朋';
    console.log(Person.prototype.name);//王福朋

    var p = new Person();

    function test() {
        // console.log(Person.prototype.name);//王福朋
        // console.log(p.name);//王福朋
        // console.log(p.__proto__.name );//王福朋
        //
        // console.log(typeof Person);//function
        // console.log(typeof p);//object

        console.log(p);//这是一个对象 p有一个对象__proto__,这里存着Person.prototype.name 设置的属性
        console.log(Person);//只是一个函数

        console.log(p.__proto__);//对象
        console.log(Person.prototype);//对象
        console.log(p.__proto__ == Person.prototype); //true

    }

</script>

<input type="submit" value="界面上显示的内容" onclick="test()"/>
<button onclick='alert("test");'>点击</button>
<button onclick="alert('test');">点击</button>
</body>
</html>